<?php

// 定义一个函数来获取音乐信息
function getMusicInfo($url = 'https://hifini.com/')
{
  // 初始化 cURL 会话
  $ch = curl_init($url);

  // 设置 cURL 选项
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应而不是直接输出
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用 SSL 证书验证（不推荐）


  // 执行 cURL 会话并获取响应数据
  $response = curl_exec($ch);

  // 检查 cURL 错误
  if (curl_errno($ch)) {
    die('cURL 错误: ' . curl_error($ch));
  }

  // 关闭 cURL 会话
  curl_close($ch);

  // 使用正则表达式解析响应数据
  // $pattern = '/<a\s+href=\"(.*?)\".*?\>(.*?)《(.*?)》.*?<\/a>/i';
  $pattern = '/<a\s+href=\"thread(.*?)htm\".*?\>(.*?)<\/a>/i';
  if (preg_match_all($pattern, $response, $matches)) {

    $musicMain = [];
    // $matches[0] 包含完整匹配项，但我们对捕获组感兴趣
    for ($i = 0; $i < count($matches[1]); $i++) {
      $for_name = '';
      $for_artist = '';
      if (preg_match('/(.*?)《(.*?)》.*?/i', $matches[2][$i], $name_artist)) {
        $for_name = $name_artist[2];
        $for_artist = $name_artist[1];
      } else {
        $for_name = $matches[2][$i];
      }
      $musicMain[] = [
        'name' => $for_name,
        'artist' => $for_artist,
        'musicInfoUrl' => "https://hifini.com/thread" . $matches[1][$i] . 'htm',
      ];
    }
    // return $musicMain;
    return $musicMain;
  } else {
    return []; // 没有找到匹配项，返回空数组
  }
}

function searchFn($value)
{
  // 去除字符串两端的空白字符
  $s = trim($value);
  // 如果处理后的字符串为空，则返回默认 URL
  if (empty($s)) {
    return "https://hifini.com/";
  }
  // 对字符串进行 URL 编码
  $s = urlencode($s);
  $s = str_replace(['!', '*', '(', ')'], ['%21', '%2A', '%28', '%29'], $s);
  $s = str_replace('%', '_', $s);
  $s = "https://hifini.com/search-" . $s . "-1.htm"; // 保留您的原始逻辑
  return $s;
}

// 获取来自前端的 GET 请求参数 'url'
$url_param = isset($_GET['url']) ? $_GET['url'] : '';
$search_param = isset($_GET['search']) ? $_GET['search'] : '';

// 如果提供了 URL 参数，则使用它；否则，使用默认 URL
$urlToUse = empty($url_param) ? 'https://hifini.com/' : $url_param;

header('Content-Type: application/json');

if ($search_param) {
  echo json_encode(getMusicInfo(searchFn($search_param)));
} else {
  echo json_encode(getMusicInfo($urlToUse));
}

?>